home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / 422mods.zip / TW08A.422 < prev    next >
Text File  |  1993-03-25  |  9KB  |  335 lines

  1. TW08a.MOD -- bug fix for TW08.MOD, extended automessage
  2. The Warlord #1 @7309
  3. Wed Mar 17 17:42:11 1993
  4. ┌────────────────────────────────────────────────────────────────────────────┐
  5. │ Mod Name: TW08a.MOD               Mod Author: The Warlord                  │
  6. │ Difficulty: ▒░░░░░░░░░            Date: 03/17/93                           │
  7. │ WWIV Version: 4.22 (others, too)                                           │
  8. │ Files Affected: MISCCMD.C, FCNS.H                                          │
  9. │ Description: This is an extended auto-message mod, see features below.     │
  10. └────────────────────────────────────────────────────────────────────────────┘
  11.  
  12. ─ Features ─
  13. ■ 10 lines, instead of only 3
  14. ■ 70 characters per line, instead of only 39
  15. ■ Pretty colors all over :)
  16. ■ You can use colors in the automessage
  17. ■ Sysop or automessage author can delete the automessage
  18. ■ /S ends automessage, if it's not 10 lines long.
  19. ■ /ABT aborts the automessage
  20.  
  21. Ok, the reason I'm releasing this fix is because there were just a few
  22. little bugs.. one was that the automessage author couldn't delete the
  23. automessage, I forgot to add a simple "|| (usernum == status.amsguser))" in
  24. there.  Also, I received many complaints from people who liked my colors,
  25. but couldn't capture them because I used raw "WWIVANSI". So now you'll have
  26. to search for all occurrences of "^C" and replace them with "" (little heart,
  27. hit Ctrl-P Ctrl-C in most editors, ASCII char 3). Another solution to this
  28. problem would be for more sysops to install E-Mail/Message download mods,
  29. I re-released someone's mod as MSGDLTW.MOD (that was before I started
  30. numbering mine, and it was also just a re-release, I didn't make it, and
  31. I stated that in the mod). If you'd like a copy of that mod, it's available
  32. on my system here (see end of this mod for info on addresses/phone number),
  33. or I could send it to you in E-Mail, unless Filo would allow it on the modnet
  34. (fairly small, I'll check with him and post it if I can).
  35. For those who installed TW08.MOD, all of the updates (I hope) are marked
  36. with "/* FIX - <how fixed> */", so search for those lines if you've already
  37. installed it, and modify them accordingly.. or else you can just re-install
  38. the mod totally...
  39.  
  40. [ Step 1 ]: Back up your source! This is always a good idea.. There could be
  41.             a little cockroach or two in this mod somewhere. :)
  42.  
  43.             Example backup command line:
  44.             pkzip -ex -u source.zip *.c *.h *.mak
  45.  
  46.  
  47. [ Step 2 ]: Load up MISCCMD.C, and delete the functions:
  48.             void read_automessage()
  49.             void write_automessage1()
  50.             void write_automessage()
  51.             Block copy the following 3 functions in their place:
  52.  
  53. void read_automessage()
  54. {
  55.   int i,i1,i2,i3,f,len,ptrbeg[10],ptrend[10]; /* FIX - delete ",temp" */
  56.   char s[81],l[11][81],anon,buf[512];
  57.   slrec ss;
  58.  
  59.   /* FIX - delete "temp=curatr;" */
  60.   sprintf(s,"%sAUTO.MSG",syscfg.gfilesdir);
  61.   f=open(s,O_RDWR | O_BINARY);
  62.   nl();
  63.   anon=status.amsganon;
  64.   if (f<1) {
  65.     nl();
  66.     ansititle("No Auto-Message!"); /* FIX - change "title(" to "ansititle(" */
  67.     nl();
  68.   } else {
  69.     len=read(f,(void *)buf,512);
  70.     close(f);
  71.     for (i=0; i<10; i++) {
  72.       ptrbeg[i]=0;
  73.       ptrend[i]=0;
  74.     }
  75.     i=0;
  76.     i1=0;
  77.     i2=0;
  78.     for(i=0; i<len; i++) {
  79.       if (i1) {
  80.         if (buf[i]==10) {
  81.           ptrbeg[i2]=i+1;
  82.           i1=0;
  83.         }
  84.       } else {
  85.         if (buf[i]==13) {
  86.           ptrend[i2]=i-1;
  87.           if (i2<11) {
  88.             for (i3=ptrbeg[i2]; i3<=ptrend[i2]; i3++)
  89.               l[i2][i3-ptrbeg[i2]]=buf[i3];
  90.               l[i2][ptrend[i2]-ptrbeg[i2]+1]=0;
  91.           }
  92.           ++i2;
  93.           i1=1;
  94.         }
  95.       }
  96.     }
  97.     ss=syscfg.sl[actsl];
  98.     if (anon)
  99.       if (ss.ability & ability_read_post_anony)
  100.         sprintf(s,"^C7───══ ^C5%s ^C7══───",&(l[0][0]));
  101.       else
  102.         strcpy(s,"^C7───══ ^C5UNKNOWN ^C7══───");
  103.     else
  104.       strcpy(s,&(l[0][0]));
  105.     nl();
  106.     if (okansi()) {
  107.       npr("\x1b[1;37;40m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\r\n\x1b[47m \x1b[0;34;47mAutomessage By ^C7 %s\x1b[40m\r\n",s);
  108.       npr("\x1b[47m\x1b[1;30;40m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\r\n^C0");
  109.     }
  110.     else
  111.       npr("Automessage By: %s\r\n", s);
  112.     nl();
  113.     i=1;
  114.     while ((ptrend[i]) && (i<11)) {
  115.       pl(&(l[i][0]));
  116.       ++i;
  117.     }
  118.     nl();
  119.   }
  120.   outstr("^C0"); /* FIX - replaced "curatr=temp;" */
  121. }
  122.  
  123. void write_automessage1()
  124. {
  125.   int i,i1,i2=0,f;
  126.   char s[81],l[11][81],g[81];
  127.   slrec ss;
  128.  
  129.   nl();
  130.   npr("^C5Enter auto-message now, max ^C710 ^C5lines.\r\n");
  131.   npr("^C5Enter ^C2/S ^C5on a blank line to end.\r\n");
  132.   nl();
  133.   s[0]=0;
  134.   for (i=0; i<10; i++) {
  135.     npr("^C7[^C5%2d^C7] ",i+1);
  136.     sb(70,7);
  137.     inli(&(l[i][0]),s,70,1);
  138.     if (stricmp(&(l[i][0]),"/s")==0) {
  139.       l[i][0]=0;
  140.       i2=i;
  141.       break;
  142.     }
  143.     sprintf(g,"^C1");
  144.     strcat(g,&(l[i][0]));
  145.     strcat(g,"\r\n");
  146.     strcpy(&(l[i][0]),g);
  147.   }
  148.   if (!i2)
  149.     i2=10;
  150.   nl();
  151.   ss=syscfg.sl[actsl];
  152.   if (ss.ability & ability_post_anony) {
  153.     prt(5,"Anonymous? ");
  154.     if (yn())
  155.       i1=anony_sender;
  156.     else
  157.       i1=0;
  158.   }
  159.   i1=0;
  160.   prt(5,"Is this OK? ");
  161.   if (yn()) {
  162.     status.amsganon=i1;
  163.     status.amsguser=usernum;
  164.     save_status();
  165.     sprintf(s,"%sAUTO.MSG",syscfg.gfilesdir);
  166.     f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  167.     strcpy(s,nam(&thisuser,usernum));
  168.     strcat(s,"\r\n");
  169.     write(f,(void *)s,strlen(s));
  170.     for (i=0; i<i2; i++)
  171.       write(f,(void *)&(l[i][0]),strlen(&(l[i][0])));
  172.     sysoplog("^C5Changed Auto-Message.");
  173.     nl();
  174.     pl("^C7Auto-message saved.");
  175.     nl();
  176.     close(f);
  177.   }
  178. }
  179.  
  180. void write_automessage()
  181. {
  182.   char ch, s[81];
  183.   int done,okwrite;
  184.   slrec ss;
  185.  
  186.   ss=syscfg.sl[actsl];
  187.   if (ss.posts)
  188.     okwrite=1;
  189.   else
  190.     okwrite=0;
  191.   if (thisuser.restrict & restrict_automessage)
  192.     okwrite=0;
  193.   done=0;
  194.   do {
  195.     cls();
  196.     pl("^C7Auto-Message:");
  197.     nl();
  198.     pl("^C7[^C2R^C7] ^C1Read auto-message");
  199.     pl("^C7[^C2W^C7] ^C1Write auto-message");
  200.     pl("^C7[^C2A^C7] ^C1Auto-reply to auto-message");
  201.     if ((so()) || (usernum == status.amsguser)) { /* FIX - modify */
  202.       pl("^C7[^C2D^C7] ^C1Delete auto-message");
  203.       pl("^C7[^C2Q^C7] ^C1Quit");
  204.       nl();
  205.       npr("^C5Choice: ");
  206.       sb(1,7);
  207.       ch=onek("QDRAW");
  208.     }
  209.     else {
  210.       pl("^C7[^C2Q^C7] ^C1Quit");
  211.       nl();
  212.       npr("^C5Choice: ");
  213.       sb(1,7);
  214.       ch=onek("QRAW");
  215.     }
  216.     switch(ch) {
  217.       case 'Q':
  218.         done=1;
  219.         break;
  220.       case 'R':
  221.         read_automessage();
  222.         pausescr();
  223.         break;
  224.       case 'W':
  225.         if (!okwrite)
  226.           npr("^C6Sorry, you can't change the automessage.\r\n");
  227.         else
  228.           write_automessage1();
  229.         pausescr();
  230.         break;
  231.       case 'D':
  232.         sprintf(s,"%sAUTO.MSG",syscfg.gfilesdir);
  233.         if (exist(s)) {
  234.           cls();
  235.           read_automessage();
  236.           nl();
  237.           npr("^C5Delete auto-message? ");
  238.           if (yn()) {
  239.             status.amsguser=0;
  240.             status.amsganon=0;
  241.             unlink(s);
  242.             pl("^C6Deleted!");
  243.             sysoplog("   ^C2Deleted the auto-message.");
  244.           }
  245.         }
  246.         else
  247.           pl("^C6There's no auto-message to delete!");
  248.         pausescr();
  249.         break;
  250.       case 'A':
  251.         if (status.amsguser)
  252.           email(status.amsguser,0,0,status.amsganon);
  253.         break;
  254.     }
  255.   } while ((!done) && (!hangup));
  256. }
  257.  
  258.  
  259. [ Step 3 ]: Now page go down to the bottom of the file (MISCCMD.C), and
  260.             block copy these functions in.. Note: make sure you don't
  261.             already have these functions.. search through FCNS.H for them.
  262.             If you already have them, replace them with these.
  263.  
  264. void sb(int num, int colornum)
  265. {
  266.   int i;
  267.  
  268.   prt(colornum,"[");
  269.   ansic(1);
  270.   for (i=0;i<num;i++)
  271.     outchr(' ');
  272.   ansic(colornum);
  273.   outchr(']');
  274.   if (okansi())
  275.     npr("\x1b[%dD",num+1);
  276.   else
  277.     for (i=0;i<num+1;i++)
  278.       outchr('\b');
  279.   ansic(1);
  280. }
  281.  
  282. void cls()
  283. {
  284.   if (okansi())
  285.     outstr("\x1b[2J");    
  286.   else
  287.     outchr(12);
  288. }
  289.  
  290. void ansititle(char *str)
  291. {
  292.   int i,length; /* FIX - deleted ",temp" */
  293.  
  294.   if (okansi()) {
  295.     /* FIX - deleted "temp=curatr;" */
  296.     length=strlen(str);
  297.     length+=2;
  298.     for (i=0;i<length;i++)
  299.       npr("\x1b[1;37;40m▄");
  300.     nl();
  301.     npr("\x1b[0;31;47m %s ",str);
  302.     nl();
  303.     for (i=0;i<length;i++)
  304.       npr("\x1b[1;30;40m▀");
  305.     nl();
  306.   }
  307.   else
  308.     npr("%s",str);
  309.   outstr("^C0"); /* FIX - replaced "curatr=temp;" */
  310. }
  311.  
  312. [ Step 4 ]: Save MISCCMD.C, and load up FCNS.H..    Go down to MISCCMD.C, at
  313.                         the end, and copy these lines in:
  314.                         (note: if you can MAKE FCNS do that instead..).
  315.  
  316. void sb(int num, int colornum);
  317. void cls();
  318. void ansititle(char *str);
  319.  
  320. [ Step 6 ]: Save FCNS.H, and start it compiling.. It won't take TOO long on a
  321.             286/386/486, 'cause it only needs to compile 1 file.. but if you
  322.             have an 8088 or something, go buy a new computer while it's
  323.             compiling. =|-]
  324.  
  325. If you like, and install this mod, or any of my mods, or if you feel the need
  326. to contact me for any reason, either call my board..
  327. The Fish Tank [GSA/ASV/CIN]
  328. (703) 256-4117
  329. or E-Mail me at:
  330. WWIVLink 1@17306
  331. WWIVNet 1@7309
  332. IceNet 1@7309
  333. FishNet 193@5002
  334.  
  335.